<?php

/**
 * Easily create a slug for each record based on a specified set of fields
 *
 * @package     csDoctrineSortablePlugin
 * @subpackage  template
 * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
 * @link        www.phpdoctrine.org
 * @since       1.0
 * @version     $Revision$
 * @author      Travis Black <tblack@centresource.com>
 */
class Doctrine_Template_Signable extends Doctrine_Template {
/**
 * Array of Signable options
 *
 * @var string
 */
protected $_options = array(
          'created' =>  array(
          'name'          => 'created_by',
          'type'          => 'string',
          'disabled'      => false,
          'expression'    => false,
          'options'       => array()
        ),
          'updated' =>  array(
          'name'          => 'updated_by',
          'type'          => 'string',
          'disabled'      => false,
          'expression'    => false,
          'onInsert'      => true,
          'options'       => array()
        )
    );
  /**
   * __construct
   *
   * @param string $array
   * @return void
   */
  public function __construct(array $options = array()) {
    $this->_options = Doctrine_Lib::arrayDeepMerge($this->_options, $options);
  }

  /**
   * Set table definition for sortable behavior
   * (borrowed and modified from Sluggable in Doctrine core)
   *
   * @return void
   */
  public function setTableDefinition() {

    if(!$this->_options['created']['disabled']) {
            $this->hasColumn(
                $this->_options['created']['name'],
                $this->_options['created']['type'],
                null,
                $this->_options['created']['options']
            );
        }
        if(!$this->_options['updated']['disabled']) {
            $this->hasColumn(
                $this->_options['updated']['name'],
                $this->_options['updated']['type'],
                null,
                $this->_options['updated']['options']
            );
        }

    $this->addListener(new Doctrine_Template_Listener_Signable($this->_options));
  }
}
